package com.lh.jianzhioffer.专项练习.数组;

import sun.security.provider.Sun;

/**
 * @author: linghao
 * @since: 2023/2/19
 *
 * 给定一个含有 n 个正整数的数组和一个正整数 target 。
 *
 * 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0
 *
 * 滑动窗口
 */
public class 和大于等于target的最短子数组008滑动 {

    public int minSubArrayLen(int target, int[] nums) {
        if(nums == null || nums.length == 0)return 0;
        int start=0,end=0,sum=0,ans = Integer.MAX_VALUE;
        while (end<nums.length){
            sum += nums[end];
            while (sum >= target){
                ans = Math.min(ans,end-start+1);
                sum -= nums[start];  //最小长度
                start++;
            }
            end++;
        }
        return ans==Integer.MAX_VALUE ? 0 : ans;
    }
}
